home *** CD-ROM | disk | FTP | other *** search
/ Meeting Pearls 1 / Meeting Pearls Vol 1 (1994).iso / installed_progs / comm / ums / developer / demo / groupcontents.mod < prev    next >
Encoding:
Text File  |  1993-09-29  |  5.1 KB  |  146 lines

  1. (* ------------------------------------------------------------------------
  2.   :Program.       GroupContents
  3.   :Contents.      shows contents of one group in UMS' messagebase
  4.   :Author.        Kai Bolay [kai]
  5.   :Address.       Snail Mail:              EMail:
  6.   :Address.       Hoffmannstraße 168       UUCP: kai@amokle.stgt.sub.org
  7.   :Address.       D-71229 Leonberg         FIDO: 2:2407/106.3
  8.   :History.       v1.0 [kai] 25-Mar-93 (added Martin's suggestion)
  9.   :History.       v1.1 [kai] 15-Apr-93 (added SERVER keyword, better Login() failure)
  10.   :History.       v1.2 [kai] 22-Sep-93 (updated for V40 Intefaces)
  11.   :Copyright.     Public Domain
  12.   :Language.      Oberon
  13.   :Translator.    AMIGA OBERON v3.01d
  14.   :Imports.       ums
  15. ------------------------------------------------------------------------ *)
  16. MODULE GroupContents;
  17.  
  18. IMPORT
  19.   ums,
  20.   I: Intuition, d: Dos, e: Exec, u: Utility,
  21.   NoGuru, Break,
  22.   y: SYSTEM;
  23. CONST
  24.   Template = "USER/A,PASSWORD/A,SERVER/K,GROUP/A,NEW/S\o$VER: GroupContents 1.2 (22.9.93)\n\r";
  25. VAR
  26.   RD: d.RDArgsPtr;
  27.   Args: STRUCT (dummy: d.ArgsStruct)
  28.     name: e.STRPTR;
  29.     password: e.STRPTR;
  30.     server: e.STRPTR;
  31.     group: e.STRPTR;
  32.     new: I.LONGBOOL;
  33.   END;
  34.   acc: LONGINT;
  35.   res, last: LONGINT;
  36.   From, Subject: e.STRPTR;
  37.  
  38. (* $Debug- *)
  39. PROCEDURE CheckErr;
  40. VAR
  41.   err: INTEGER;
  42.   txt: ums.STRPTR;
  43. BEGIN
  44.   err := ums.ErrNum (acc);
  45.   IF err # ums.ok THEN
  46.     txt := ums.ErrTxt (acc);
  47.     d.PrintF ("UMS-error: %ld, \"%s\"\n", err, txt);
  48.     HALT (20);
  49.   END;
  50. END CheckErr;
  51. (* $Debug= *)
  52.  
  53. BEGIN
  54.   RD := d.ReadArgs (Template, Args, NIL);
  55.   IF RD = NIL THEN
  56.     d.PrintF ("Usage: %s\n", y.ADR (Template));
  57.     HALT (20);
  58.   END;
  59.   (* $OddChk- $NilChk- *)
  60.   acc := ums.UMSRLogin (Args.server^, Args.name^, Args.password^);
  61.   (* $OddChk= $NilChk= *)
  62.   IF acc <= 0 THEN
  63.     d.PrintF ("Unable to login\n");
  64.     HALT (20);
  65.   END;
  66.  
  67.   (* clear local flags 0, 1 and 2 on all messages *)
  68.   res := ums.UMSSelectTags (acc, ums.tagSelWriteLocal,  I.LTRUE,
  69.                                  ums.tagSelSet,         LONGSET {},
  70.                                  ums.tagSelUnset,       LONGSET {0,1,2},
  71.                                  u.done);
  72.   CheckErr;
  73.  
  74.   (* set local flag 1 on all messages of this group *)
  75.   res := ums.UMSSelectTags (acc, ums.tagSelWriteLocal,  I.LTRUE,
  76.                                  ums.tagSelQuick,       I.LTRUE,
  77.                                  ums.tagGroup,          Args.group,
  78.                                  ums.tagSelSet,         LONGSET {1},
  79.                                  ums.tagSelUnset,       LONGSET {},
  80.                                  u.done);
  81.   CheckErr;
  82.  
  83.   (* set local flag 2 on all accessable messages *)
  84.   res := ums.UMSSelectTags (acc, ums.tagSelWriteLocal, I.LTRUE,
  85.                                  ums.tagSelSet,        LONGSET {2},
  86.                                  ums.tagSelUnset,      LONGSET {},
  87.                                  ums.tagSelMask,       LONGSET {ums.ViewAccess, ums.ReadAccess},
  88.                                  ums.tagSelMatch,      LONGSET {ums.ViewAccess, ums.ReadAccess},
  89.                                  u.done);
  90.   CheckErr;
  91.  
  92.   (* set local flag 0 on all messages with flag 1 AND flag 2 set *)
  93.   res := ums.UMSSelectTags (acc, ums.tagSelWriteLocal, I.LTRUE,
  94.                                  ums.tagSelSet,        LONGSET {0},
  95.                                  ums.tagSelUnset,      LONGSET {},
  96.                                  ums.tagSelReadLocal,  I.LTRUE,
  97.                                  ums.tagSelMask,       LONGSET {1,2},
  98.                                  ums.tagSelMatch,      LONGSET {1,2},
  99.                                  u.done);
  100.   CheckErr;
  101.  
  102.   IF Args.new = I.LTRUE THEN
  103.     (* clear local flag 0 on all old messages *)
  104.     res := ums.UMSSelectTags (acc, ums.tagSelWriteLocal, I.LTRUE,
  105.                                    ums.tagSelSet,        LONGSET {},
  106.                                    ums.tagSelUnset,      LONGSET {0},
  107.                                    ums.tagSelMask,       LONGSET {ums.Old},
  108.                                    ums.tagSelMatch,      LONGSET {ums.Old},
  109.                                    u.done);
  110.     CheckErr;
  111.   END;
  112.  
  113.  
  114.   last := 0;
  115.   LOOP
  116.     (* find next message with flag 0 set *)
  117.     last := ums.UMSSearchTags (acc, ums.tagSearchLocal, I.LTRUE,
  118.                                     ums.tagSearchLast,  last,
  119.                                     ums.tagSearchMask,  LONGSET {0},
  120.                                     ums.tagSearchMatch, LONGSET {0},
  121.                                     u.done);
  122.     CheckErr;
  123.  
  124.     IF last = 0 THEN EXIT END; (* no more messages? *)
  125.  
  126.     (* read from/subject of the message *)
  127.     IF ums.ReadUMSMsgTags (acc, ums.tagMsgNum,    last,
  128.                                 ums.tagRFromName, y.ADR (From),
  129.                                 ums.tagRSubject,  y.ADR (Subject),
  130.                                 u.done) THEN END;
  131.     CheckErr;
  132.  
  133.     d.PrintF ("%5ld %-20.20s %-40.40s\n", last, From, Subject);
  134.  
  135.     (* free the buffers belonging to the message *)
  136.     ums.FreeUMSMsg (acc, last);
  137.   END;
  138. CLOSE
  139.   IF acc # NIL THEN
  140.     ums.Logout (acc); acc := 0;
  141.   END;
  142.   IF RD # NIL THEN
  143.     d.FreeArgs (RD); RD := NIL;
  144.   END;
  145. END GroupContents.
  146.